// 字符串输入输出

#include <stdio.h>

void f(void)
{
    char word[8];
    char word2[8];
    scanf("%7s", &word);
    scanf("%7s", &word2);
    printf("%s##%s##\n", word, word2);
}

int main(int argc, char const *argv[])
{
    char *t = "title";
    char *s;
    // 不会产生信道字符串，只是让指针 s 指向了 t 所指的字符串
    //  对 s 的操作相当于对 t 做的
    s = t;

    // 输入输出：%s
    char word[8];
    char word2[8];
    // scanf会读入一个单词（到空格、tab或回车为止）
    scanf("%s", &word);
    scanf("%s", &word2);
    // Hello##World!##
    printf("%s##%s##\n", word, word2);
    // 上面的 scanf 是不安全的，因为不知道要接受的字符串是多长
    // 输入可能超过数组的长度
    // 数组最大能接受7个字符（因为结尾要有0）

    // 想要安全地输入，就使用类似 %7s 的形式
    // 这样scanf只会接收7个字符，剩余交给下一个scanf或丢弃
    f();
    

    // 常见错误：char* 不一定是字符串
    // string指向的位置不一定，可能是无害或有害的
    // 由于没有对 string 初始化为0，让指针指向实际有效的地址
    // 所以不一定每次都出错，也可能发生严重的错误
    char *string;
    // scanf("%s", &string);

    // 空字符串错误
    // 以下写法正确，
    // 这是一个空字符串，buffer[0] == '0'
    char buffer[100] = "";
    // size为100
    printf("sizeof(buffer) = %d\n", sizeof(buffer));
    // 以下写法错误，本字符串长度只有1，内容为'\0'
    char buffer2[] = "";
    // size为1
    printf("sizeof(buffer2) = %d\n", sizeof(buffer2));

    return 0;
}